package com.jrx.anytxn.transaction.service;

import com.jrx.anytxn.common.exception.TxnBizException;
import com.jrx.anytxn.transaction.entity.*;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 交易信息service
 *
 * @author : zhenghaopu
 * 2019/11/1
 */
public interface ITlTransactionInfoService {
    /**
     * 根据放款流水生成交易流水信息
     *
     * @param tlDisbursementLog 放款流水
     * @param reversalFlag      冲正标志
     * @return 交易信息
     */
    TlTransactionInfo buildTlTransactionInfo(TlDisbursementLog tlDisbursementLog, String reversalFlag) throws TxnBizException;

    /**
     * 通过账户信息构建交易信息
     *
     * @param accountMainInfo 账户信息
     * @param reversalFlag    冲正标志
     * @return 交易信息
     */
    TlTransactionInfo buildTlTransactionInfo(AmAccountMainInfo accountMainInfo, String reversalFlag) throws TxnBizException;

    /**
     * 通过08交易账户构建交易信息
     *
     * @param tlPaymentAllocationLog
     * @return
     * @throws TxnBizException
     */
    TlTransactionInfo buildTlTransactionInfo(TlPaymentAllocationLog tlPaymentAllocationLog) throws TxnBizException;

    /**
     * 根据原始交易信息生成交易信息
     *
     * @param tlTransactionInfo
     * @param txnCode
     * @param reversalFlag
     * @return
     * @throws TxnBizException
     */
    TlTransactionInfo buildTlTransactionInfo(TlTransactionInfo tlTransactionInfo, String txnCode, String reversalFlag) throws TxnBizException;

    /**
     * 生成退款交易流水
     *
     * @param loanMainInfo 退款原订单
     * @param refundAmount 退款金额
     * @param businessDate 退款业务日期
     * @param seqNo        退款流水号
     * @return
     * @throws TxnBizException
     */
    TlTransactionInfo buildRefundTransInfo(AmLoanMainInfo loanMainInfo, BigDecimal refundAmount, Date businessDate, String seqNo) throws TxnBizException;

    /**
     * 根据订单信息生成交易流水信息
     *
     * @param amLoanMainInfo 订单信息
     * @param reversalFlag   冲正标志
     * @return 交易信息
     */
    TlTransactionInfo buildTlTransactionInfo(AmLoanMainInfo amLoanMainInfo, String reversalFlag) throws TxnBizException;
}
